In recent years, use of computers has increased dramatically worldwide. Users of computers utilize computer programs for a variety of purposes including word processing, database management, desktop publishing, and the like. In order to utilize a growing number of available computer programs, users must install the programs onto their individual computers or computer networks.
Applications today use a variety of installation technologies. For example, InstallShield, Seagate's WinInstall, or Great Lakes Software's Wise Installation System are commonly used tools for program installation. ActiveX.RTM. controls and other Web-page components often use IExpress packages, which are basically self-extracting executables with simple file copy and registry capabilities. Some functionality of computer programs like software drivers are able to use INF files, which are similar in capability of IExpress packages.
It is known in the art to install computer programs onto individual computers and computer networks using a procedural model for installation. According to a procedural model for installation of computer programs, installation is accomplished by following a regimented set of steps which describe how to get to an installed state. For example, a word processing program may be installed by following certain steps such as: (1) Launch word installation object; (2) Copy word primary executable file; (3) Copy dictionary; (4) Copy speller; and etc. Each such step may in turn require additional steps which creates a tree-based installation logic where an installation step leads to a branch of steps and then returns to follow other branches of steps. In the case of such procedural installation models, it often is quite difficult to turn on or turn off specific functions of a given computer program. That is, if the program developer desires to add or remove a desired function of a given computer program, the program developer or user often must enter a procedural installation sequence, such as described above, and add or remove a procedural step. Thus, making minor changes, for example installing a dictionary function to a word processing program, is a relatively cumbersome task.
Additionally, many of the desired functions of an application program to be installed may already be resident from a previously installed version or installation attempt. Some procedural installation models may be capable of recognizing the presence of previously installed functions of a computer program, but their tree-based logic often has trouble reacting once such a resource is found. If, for example, a newer version of a file is found on a computer, it might make sense for the current installation model not to copy an older file to the computer. But, if there are other functions, such as files or registry keys, associated with that file, the tree-based logic of a procedural installer model may have already written those associated files or registry keys to the computer's memory thereby creating a situation where older functions are coexisting with new functions. Even if no other functions have been copied to the computer at the moment, the decision not to copy related functions must be passed down the tree to other operations.
There is a need in the art for a method and system for installing computer programs and features, components and resources of computer programs where installation is accomplished based on an "as complete" description of the installed features, components and resources of the computer program. That is, there is a need for a method and system for installing a given computer software program or feature or component or resource of that program which describes how the desired installed program should look on the user's computer once the installation is complete. A "feature" is a granular piece of the product that a user may choose to install or execute. Features typically correspond roughly to the functional features of the program itself, such as a proofing tools feature or a word processing feature. A "component" is a collection of resources, such as files, shortcuts, or registry keys, that are all installed or un-installed as a unit. Components are the building blocks of the program that are not exposed to the user.
There is also a need in the art for a method and system for installing computer programs which allow for quick and efficient installation and un-installation of individual components of computer programs. There is further a need for a method and system for installing computer programs which track and utilize previously installed components of a computer program. There is also a need in the art for a method and system for temporarily and dynamically adding columns and rows to a data file for marking the installation status of the components and features of a computer program.